Water / Vegetation Moisture Index

NDWI_GAO – Normalized Difference Water Index (Gao, 1996)

NDWI_GAO is a Near-InfraRed–SWIR based index designed to estimate vegetation water content and canopy moisture using NIR and SWIR reflectance.

1. Scientific Definition

The Gao NDWI (1996) is a water content index for vegetation canopies that uses the contrast between NIR (sensitive to leaf internal structure) and SWIR (strongly absorbed by liquid water).

Formula (Gao, 1996)

NDWI_GAO = (NIR − SWIR) / (NIR + SWIR) Range: −1 → +1

  • NIR – Near InfraRed reflectance
  • SWIR – Short-Wave InfraRed reflectance (around 1.2–1.6 μm)

Typical Interpretation

NDWI_GAOInterpretation
< 0Dry soil / built-up / low water content
0 – 0.2Low canopy water content / stressed vegetation
0.2 – 0.4Moderate vegetation moisture
> 0.4High vegetation water content / healthy canopy

Main Applications

  • Vegetation water content estimation
  • Drought monitoring
  • Crop stress analysis
  • Complement to NDVI / NDII in agricultural studies

2. Data & Bands

Sentinel-2 (Approximate Gao NDWI)

  • NIR: B8 (~842 nm)
  • SWIR: B11 (~1610 nm) (Closest to 1.24 μm band used in the original Gao paper)

Landsat 8 / 9

  • NIR: B5
  • SWIR: B6 (or B6 ≈ 1.6 μm, commonly used)

Best Practices

  • Use surface reflectance (SR) products.
  • Mask clouds & shadows before computing the index.
  • Use time series of NDWI_GAO to track drought events.
  • Combine with NDVI / NDII for better vegetation diagnostics.

Suggested Palette

[ "#440154", "#414487", "#2a788e", "#22a884", "#7ad151", "#fde725" ]

3. Google Earth Engine Code – NDWI_GAO (NIR–SWIR)

// NDWI_GAO (Gao 1996) using Sentinel-2 SR
// NDWI_GAO = (NIR - SWIR) / (NIR + SWIR)
// Here: NIR = B8, SWIR ≈ B11

var roi = geometry;   // Draw your AOI as 'geometry'
Map.centerObject(roi, 11);

// 1. Load Sentinel-2 surface reflectance
var s2 = ee.ImageCollection("COPERNICUS/S2_SR")
  .filterBounds(roi)
  .filterDate("2023-01-01", "2023-12-31")
  .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 20))
  .select(["B8","B11"]); // NIR, SWIR

// 2. Median composite
var img = s2.median().clip(roi);

// 3. Compute NDWI_GAO
var ndwi_gao = img.expression(
  "(N - S) / (N + S)",
  {
    "N": img.select("B8"),  // NIR
    "S": img.select("B11")  // SWIR
  }
).rename("NDWI_GAO");

// 4. Visualization
var vis = {
  min: -1,
  max: 1,
  palette: ["#440154","#414487","#2a788e","#22a884","#7ad151","#fde725"]
};

Map.addLayer(ndwi_gao, vis, "NDWI_GAO (NIR-SWIR)");

// Optional: True Color background
var rgb = ee.ImageCollection("COPERNICUS/S2_SR")
  .filterBounds(roi)
  .filterDate("2023-01-01", "2023-12-31")
  .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 20))
  .select(["B4","B3","B2"])
  .median()
  .clip(roi);

Map.addLayer(rgb, {min:0, max:3000}, "True Color", false);

// 5. Export NDWI_GAO as GeoTIFF
Export.image.toDrive({
  image: ndwi_gao,
  description: "NDWI_GAO_Export",
  fileNamePrefix: "NDWI_GAO_NIR_SWIR",
  region: roi,
  scale: 20,        // SWIR band resolution
  crs: "EPSG:4326",
  maxPixels: 1e13
});